package com.javasea.qrprint.controller;

import com.javasea.qrprint.util.FxImageUtil;
import com.javasea.qrprint.util.ObjectPaseUtils;
import javafx.fxml.FXML;
import javafx.scene.control.ScrollBar;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Pane;

import java.lang.reflect.Field;
import java.util.Objects;
import java.util.stream.Stream;

public class SampleController {

    /**
     * 各模板FXML文件中的根pane，供截图时使用，各模板FXML文件需要为最外层的容器给个[fx:id="pane"]
     */
    @FXML
    private Pane pane;

    @FXML
    private ImageView snapshotImageView;

    @FXML
    private ImageView bitmapImageView;

    @FXML
    private ImageView quadCodeImageView;

    @FXML
    private TextField text;

    public Pane getPane(){
        return this.pane;
    }

    public void setText(String text) {
        this.text.setText(text);
    }

    public TextField getText() {
        return text;
    }

    public void setQr(String qr){
        WritableImage image = FxImageUtil.makeQuadCodeImage(qr, quadCodeImageView.fitWidthProperty().intValue(), quadCodeImageView.fitHeightProperty().intValue());
        quadCodeImageView.setImage(image);
    }


    /**
     * 调整界面
     *      1. 设置文本域 的ScaleShape为false，设置Disable为true, 以取消动态调整 文本域 大小，否则稍微字体大些可能导致标签形变。
     *      2. 去掉TextArea右边下拉条, 使之在截图的时候去掉。通过调用方法removeRightScrollBar实现。
     */
    public void refinePane() {
        Field[] fields = this.getClass().getDeclaredFields();
        for (Field field : fields) {
            Class<?> type = field.getType();
            String name = field.getName();
            Object fieldValueByName = ObjectPaseUtils.getFieldValueByName(name, this);
            if (Objects.nonNull(fieldValueByName)) {
                if (Objects.equals(type, TextField.class)) {
                    TextField text = (TextField) fieldValueByName;
                    // 取消动态调整 文本域 大小，否则稍微字体大些可能导致标签形变
                    text.setScaleShape(false);
                    text.setDisable(true);
                } else if (Objects.equals(type, TextArea.class)) {
                    TextArea text = (TextArea) fieldValueByName;
                    text.setScaleShape(false);
                    text.setDisable(true);
                    // 去掉TextArea右边下拉条, 使之在截图的时候去掉
                    removeRightScrollBar(text);
                } else if (Objects.equals(type, ImageView.class)) {
                    ImageView text = (ImageView) fieldValueByName;
                    text.setDisable(true);
                }
            }
        }
    }

    /**
     * 去掉TextArea右边下拉条, 使之在截图的时候去掉
     * @return
     */
    private void removeRightScrollBar(TextArea... textAreas) {
        Stream.of(textAreas).forEach(textArea -> {
            ScrollBar scrollBar = (ScrollBar) textArea.lookup(".scroll-bar:vertical");
            scrollBar.setDisable(true);
            scrollBar.setOpacity(0);
            scrollBar.setPrefWidth(0);
            scrollBar.setMaxWidth(0);
        });
    }

}
